//
//  FtEbf.h
//  FtEbf
//
//  Created by wanght on 15/2/2.
//  Copyright (c) 2015年 Wht. All rights reserved.
//
/*
 注意：新建工程需import FTFMDB目录下文件
 服务器错误码对照
501 激活失败，序列号错误
502;// 激活失败，订购数量不足
503; //激活有效期过期
504;//客户端未激活
505; //灌装服务器未注册
510 //灌装服务器未注册
*/

#import <Foundation/Foundation.h>

@interface FtError : NSObject

@property (nonatomic) NSString * reason;
@property (nonatomic) NSUInteger errorCode;
@end

@protocol FtEbfDelegate <NSObject>
/*
 激活成功
 */
- (void) activateSuccess;
/*
 激活失败
 */
- (void) activateFailed: (FtError *)error;
/*
 网络连接错误 激活失败
 */
- (void) activatefailedwithConnectionError:(NSError *)error;
/*
 获取有效客户列表成功
 */
- (void) loadClentsListSuccess:(id)result;
/*
 服务器返回错误 获取有效客户列表失败
 */
- (void) loadClentsListFailed:(FtError *)error;
/*
 网络连接错误 获取有效客户列表失败
 */
- (void) loadClentsListfailedwithConnectionError:(NSError *)error;
/*
 获取有效EFB包成功
 */
- (void) loadEfbPackagelistSuccess:(id)result;
/*
 服务器返回错误 获取有效EFB包失败
 */
- (void) loadEfbPackagelistFailed:(FtError *)error;
/*
 网络连接错误 获取有效EFB包失败
 */
- (void) loadEfbPackagelistFailedwithConnectionError:(NSError *)error;

/*
 网络连接错误 下载成功
 */
- (void) downdlaodEfbPackageSuccess:(id)result;
/*
服务器返回错误 下载失败
 */
- (void) downdlaodEfbPackageFailed:(FtError *)error;
/*
 下载进度
 */
- (void) downdlaodProgress:(NSUInteger) progress;
/*
 网络连接错误 下载失败
 */
- (void) downdlaodEfbPackagewithConnectionError:(NSError *)error;
@end

@interface FtEbfInfo : NSObject

@property (nonatomic) NSString * serverAddr;
@property (nonatomic) NSUInteger serverPort;
@property (nonatomic) NSString * registerNumber;
@end

@interface FtEbfRegInfo : NSObject

@property (nonatomic) NSString * companyName;//公司名称
@property (nonatomic) NSInteger dayLeft;//剩余时间
@property (nonatomic) NSString *keyCheckSum;

@end

@interface FtEbfFillingSvr : NSObject

@property (nonatomic) NSString * serverAddr;
@property (nonatomic) NSUInteger serverPort;
@end

@interface FtEbfPackageInfo : NSObject
@property (nonatomic) NSInteger efbId;
@property (nonatomic) NSString * time;
@property (nonatomic) NSString * companyName;
@property (nonatomic) NSInteger year;
@property (nonatomic) NSInteger type;
@property (nonatomic) NSString * fileName;
@property (nonatomic) NSString * keyCheckSum;
@end




@interface FtEbf : NSObject

@property (nonatomic, weak) id<FtEbfDelegate> delegate;

- (instancetype)initWithDelegate: (id<FtEbfDelegate>) delegate;
/*
 功能：激活成功后，获取激活信息。
 */
- (FtEbfRegInfo*) getRegInfo;
/*
 参数：
 info ：注册信息，包括中心服务器地址和注册码。
 功能：链接中心服务器激活
 该函数是一个异步函数,结果通过委托方法activateSuccess和activateFailed 返回
 */
- (void) activateWithInfo: (FtEbfInfo *) info;
/*
 参数：server 灌装服务器地址
 功能：链接灌装服务器获取获取本公司有效客户序列号列表。
 该函数是一个异步函数,结果通过委托方法loadClentsListSuccess和loadClentsListFailed 返回。
 */
- (void) loadClientsList:(FtEbfFillingSvr *) server;
/*
 参数：
 server 灌装服务器地址
 keyCheckSum  密钥校验和，通过getRegInfo获取。
 功能：链接灌装服务器获取获取本公司有效EFB包列表。
 该函数是一个异步函数,结果通过委托方法loadEfbPackagelistSuccess和loadEfbPackagelistFailed 返回。
 */
- (void) loadEfbPackagelist:(FtEbfFillingSvr *) server whithKeyChecksum:(NSString *)keyCheckSum;
/*
 参数：
 server 灌装服务器地址
 packageInfo  有效EFB包信息。
 功能：链接灌装服务器获取获取本公司有效EFB包列表。该函数是一个异步函数,结果通过委托方法downdlaodEfbPackageSuccess和downdlaodEfbPackageFailed 返回。
 packageInfo传入同一个文件名称可以续传
 */
- (void) downdlaodEfbPackage:(FtEbfFillingSvr *) server withEfbPackageInfo:(FtEbfPackageInfo *)packageInfo;
/*
 功能：注册是否过期，返回值 TRUE 过期，FALSE 有效
 */
- (BOOL) isKeyExpired;

/*
 功能：返回设备uuid编码
 */
- (NSString *) getDeviceUuid;


/*
 功能：返回设备唯一序列号，格式为“客户ID-激活顺序号” 无有效值时 默认为00000-00001
 */
- (NSString *) getDeviceSerialNo;

/*
 功能：获取激活状态 返回值  0:正常， 1:从未激活， 2:过期， 3:因修改时间而失效。 其他：保留
 */
- (int) getActivationStatus;
@end
